package mystruct

import "fmt"

type TreeNode struct {
	Value int
	Left  *TreeNode
	Right *TreeNode
}

func (node TreeNode) Print() {
	fmt.Println("node.value:", node.Value)
}

/**
1.要改变内容就要使用指针接收器
2.结构体过大最好用指针接收器
3.保持代码一致，建议使用指针接收器
*/
func (node TreeNode) SetTreeNodeValue(val int) {
	//接收器发生值拷贝，不会改变结构体中的值
	node.Value = val
}
func (node *TreeNode) SetTreeNodeValue2(val int) {
	//使用指针才能更改结构体内部的成员
	node.Value = val
}

func (node *TreeNode) Traversing() {
	if node == nil {
		return
	} else {
		node.Left.Traversing() //如果node.left == nil 也不会报错
		node.Print()
		node.Right.Traversing()
	}
}

func (node *TreeNode) TraversingFunc(f func(*TreeNode)) {
	if node == nil {
		return
	} else {
		node.Left.TraversingFunc(f) //如果node.left == nil 也不会报错
		f(node)
		node.Right.TraversingFunc(f)
	}
}
